import math

def calculate_column_width(table, column_index):
    """
    计算表格中指定列的最大宽度(以字节为单位)
    
    参数:
        table: 二维列表表示的表格数据
        column_index: 要计算宽度的列索引
        
    返回值:
        该列的最大宽度(字节数)
    """
    return max(len(row[column_index].encode()) for row in table)

def calculate_all_column_widths(table):
    """
    计算表格中所有列的最大宽度
    
    参数:
        table: 二维列表表示的表格数据
        
    返回值:
        包含每列最大宽度的列表
    """
    return [calculate_column_width(table, i) for i in range(len(table[0]))]

def format_cell(content, width, alignment="right"):
    """
    按照指定宽度和对齐方式格式化表格单元格
    
    参数:
        content: 单元格内容字符串
        width: 单元格期望宽度
        alignment: 对齐方式("left"-左对齐, "mid"-居中, "right"-右对齐)
        
    返回值:
        格式化后的字符串(不含末尾空格)
    """
    encoded_len = len(content.encode())
    space = width - encoded_len
    
    if alignment == "left":
        return content + " " * space
    elif alignment == "mid":
        left = math.floor(space / 2)
        right = math.ceil(space / 2)
        return " " * left + content + " " * right
    else:  # 默认右对齐
        return " " * space + content

def draw_row(row, column_widths):
    """
    绘制表格的一行(格式化每个单元格)
    
    参数:
        row: 包含单元格内容的列表
        column_widths: 包含列宽度的列表
    """
    formatted_cells = []
    for content, width in zip(row, column_widths):
        formatted_cells.append(format_cell(content, width))
    print(" ".join(formatted_cells))

def draw_table(table):
    """
    绘制带边框的格式化表格
    
    参数:
        table: 二维列表表示的表格数据
    """
    column_widths = calculate_all_column_widths(table)
    total_width = sum(column_widths) + len(column_widths) - 1  # 减去多余的空格
    
    print("-" * total_width)
    for row in table:
        draw_row(row, column_widths)
        print("-" * total_width)